#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QToolBar>
#include <QDebug>

//一个窗口可以有多个工具栏，也可以没有
//工具栏往往也可以手动移动位置
//添加菜单栏，使用的是setMenuBar,因为菜单栏只能有一个,重复设置,只能新的替换旧的(set就包含了“替换”）
//添加菜单栏,使用的是addToolBar,因为工具栏，可以有多个,重复设置,就会出现多个工具栏,不包含“替换”

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //创建菜单栏
    QMenuBar* menuBar = this->menuBar();
    this->setMenuBar(menuBar);

    //创建菜单
    QMenu* menu1 = new QMenu("文件");
    menuBar->addMenu(menu1);

    //创建两个菜单项
    QAction* action1 = new QAction("上传", this);
    QAction* action2 = new QAction("下载", this);
    //菜单项可以放到菜单中
    menu1->addAction(action1);
    menu1->addAction(action2);

    //设置action图标
    //典型的工具栏，这里展示的一般是图标，而不是文本
    //如果设置了Icon,那么也会产生图标覆盖文本这样的情况
    action1->setIcon(QIcon(":/image/upload.png"));
    action2->setIcon(QIcon(":/image/download.png"));

    //创建工具栏,工具栏是需要手动创建出来的. 自身不会自动创建
    QToolBar* toolBar1 = new QToolBar();
    QToolBar* toolBar2 = new QToolBar();
    this->addToolBar(toolBar1);

    //设置初始位置在下边
    this->addToolBar(Qt::BottomToolBarArea, toolBar2);

    //设置只允许停靠在上面或者下面
    toolBar2->setAllowedAreas(Qt::BottomToolBarArea | Qt::TopToolBarArea);

    //设置不能浮动
    toolBar2->setFloatable(false);

    //设置不能移动
    toolBar1->setMovable(false);

    //再创建两个菜单项
    QAction* action3 = new QAction("动作3", this);
    QAction* action4 = new QAction("动作4", this);

    //单项放到工具栏中
    //如果一个QAction既是QMenu的子元素，又是QToolBar的子元素，释放的时候，是否会重复delete?
    //在Qt中，如果一个 QAction 既被加入到 QMenu 中，也被加入到 QToolBar 中，它不会被重复删除。
    //这是因为Qt使用父子关系来管理内存。当你将一个 QAction 添加到 QMenu 或 QToolBar 时，这些对象不会取得该动作的所有权。
    //相反，所有权通常由你最初创建 QAction 时指定的父对象持有。
    //我这里action所有的父对象都是MainWindow,所以由MainWindow来进行释放
    toolBar1->addAction(action1);
    toolBar1->addAction(action2);
    toolBar2->addAction(action3);
    toolBar2->addAction(action4);

    //设置悬浮提示
    action1->setToolTip("点击进行上传");

    connect(action1, &QAction::triggered, this, &MainWindow::upload);
    connect(action2, &QAction::triggered, this, &MainWindow::download);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::upload()
{
   qDebug() << "upload";
}

void MainWindow::download()
{
   qDebug() << "download";
}

